/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import model.gestion_jeu.Partie;
import vue.DamierView;

/**
 * <b>AbstractController est une classe abstraite indiquant les methodes que doivent implementer les controllers
 * </b>
  * <p>
 * AbstractController est caractérisé par les informations suivantes :
 * <ul>
 * <li>La classe principale du model</li>
 * <li>La frame principale de la vue</li>
 * </ul>
 * </p>
 * @see PartieModel
 * @see DamierView
 * @author nabil mansouri
 * @version 2.0
 */
public abstract class AbstractController {
      /**
         * La classe du model
         * 
         * @see PartieModel
         */
        protected Partie model;
              /**
         * La classe de notre vue
         * 
         * @see DamierView
         */
        protected Vue vue;
        /**
         * Constructeur de la classe
         * @param vue
         *          la vue de notre programme
         */
	public AbstractController(Vue vue){
		this.vue = vue;
		//On définit la liste des opérateurs afin d'être sûr qu'ils soient bons
        }
	
   /**
     *Prends en paramètre le nom des deux joueurs et cree une nouvelle partie. Cette methode est abstraite
     * @param nom1
     *          nom du joueur blanc
     * @param nom2 
         *      nom du joueur en noir
     */
        public abstract void creerPartie(String nom1, String nom2);
           /**
     * Initialise le damier de la partie. Et repositionne les pions à l'états initial. Cette methode est abstract.
     */
	public abstract void initialisation();
   /**
     *Prends en paramètre le nom des deux joueurs et réinitialise le damier. Cette methode est abstraite
     * @param nom1
     *          nom du joueur blanc
     * @param nom2 
         *      nom du joueur en noir
     */
        public abstract void initialisation(String nom1, String nom2);
        
   /**
     *Prends en paramètre les coordonnées de la case séléctionné et réalise le déplacement d'une piece si nécessaire
     * Cette methode est abstraite.
     * @param x
     *          coordonnée en abscisse
     * @param y 
         *      coordonnée en ordonnée
     */
        public abstract void selectionCase(int x, int y);
        
         /**
     *Prends en paramètre les coordonnées de la piece séléctionné et réalise la séléction si elle est autorisée.
     * Cette methode est abstraite.
     * @param x
     *          coordonnée en abscisse
     * @param y 
         *      coordonnée en ordonnée
     */
        public abstract void selectionPion(int x, int y);
         /**
     *Cette methode est abstraite. Elle met fin à la partie.
     */
        public abstract void finPartie();

}
